home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_09_08 / 9n08068a < prev    next >
Text File  |  1991-06-19  |  4KB  |  174 lines

  1.  
  2. Listing 2 - The Function print_hist_image (file djet.c)
  3.  
  4.  
  5.    /***********************************
  6.    *
  7.    *   print_hist_image(...
  8.    *
  9.    ************************************/
  10.  
  11.  
  12.  
  13. print_hist_image(printer, hist)
  14.    FILE *printer;
  15.    unsigned long hist[];
  16. {
  17.    char   c, d;
  18.    int          i, j, k;
  19.    unsigned long limit, max;
  20.  
  21.    d = 0;
  22.    c = 255;
  23.  
  24.       /********************************
  25.       *
  26.       *   First scale the histogram
  27.       *
  28.       *********************************/
  29.  
  30.    max = 0;
  31.    for(i=0; i<256; i++)
  32.       if(hist[i] > max) max = hist[i];
  33.  
  34.    if(max > 200){
  35.       for(i=0; i<256; i++){
  36.         hist[i] = (hist[i]*200)/max;
  37.       }
  38.    }
  39.  
  40.  
  41.       /********************************
  42.       *
  43.       *   Second print it
  44.       *
  45.       *   Print a space between the image
  46.       *   and the histogram.
  47.       *
  48.       *********************************/
  49.  
  50.  
  51.    for(i=0; i<20; i++){
  52.          end_graphics_mode(printer);
  53.          select_300_dpi_resolution(printer);
  54.          set_raster_width(printer);
  55.          start_raster_graphics(printer);
  56.          select_full_graphics_mode(printer);
  57.          set_horizontal_offset(printer);
  58.          putc(ESCAPE, printer);
  59.          putc('*', printer);
  60.          putc('b', printer);
  61.          putc('2', printer);
  62.          putc('0', printer);
  63.          putc('0', printer);
  64.          putc('W', printer);
  65.  
  66.          for(j=0; j<200; j++)
  67.             putc(d, printer);
  68.    }
  69.  
  70.  
  71.    printf("\n\nHIST> Now printing the histogram");
  72.    for(i=0; i<256; i++){
  73.       printf("\n\tHIST> Histogram[%d]=%ld", i, hist[i]);
  74.  
  75.             /* print the line 2 times */
  76.       for(k=0; k<2; k++){
  77.  
  78.          end_graphics_mode(printer);
  79.          select_300_dpi_resolution(printer);
  80.          set_raster_width(printer);
  81.          start_raster_graphics(printer);
  82.          select_full_graphics_mode(printer);
  83.  
  84.  
  85.             /***************************
  86.             *
  87.             *        Print grid marks every
  88.             *        50 pixels.  Do this by
  89.             *        setting a shorter margin
  90.             *        then printing 2 marks then
  91.             *        the data.
  92.             *
  93.             ****************************/
  94.  
  95.          if( (i ==   0)        ||
  96.              (i ==  50) ||
  97.              (i == 100) ||
  98.              (i == 150) ||
  99.              (i == 200) ||
  100.              (i == 255)){
  101.  
  102.             set_shorter_horizontal_offset(printer);
  103.             putc(ESCAPE, printer);
  104.             putc('*', printer);
  105.             putc('b', printer);
  106.             putc('2', printer);
  107.             putc('0', printer);
  108.             putc('2', printer);
  109.             putc('W', printer);
  110.  
  111.             putc(c, printer);
  112.             putc(c, printer);
  113.  
  114.  
  115.             if(hist[i] >= 200)
  116.                hist[i] = 200;
  117.  
  118.             limit = 200 - hist[i];
  119.  
  120.             if(hist[i] == 0)
  121.                putc(c, printer);
  122.  
  123.             for(j=0; j<hist[i]; j++)
  124.                putc(c, printer);
  125.  
  126.             for(j=0; j<limit; j++)
  127.               putc(d, printer);
  128.  
  129.          }  /* ends print grid marks */
  130.  
  131.  
  132.             /***************************
  133.             *
  134.             *        If you do not print
  135.             *        grid marks, set the normal
  136.             *        margin and then print the
  137.             *        data.
  138.             *
  139.             ****************************/
  140.  
  141.          else{
  142.             set_horizontal_offset(printer);
  143.             /* this prints 200 bytes so print 200 */
  144.             putc(ESCAPE, printer);
  145.             putc('*', printer);
  146.             putc('b', printer);
  147.             putc('2', printer);
  148.             putc('0', printer);
  149.             putc('0', printer);
  150.             putc('W', printer);
  151.  
  152.             if(hist[i] >= 200)
  153.                hist[i] = 200;
  154.  
  155.             limit = 200 - hist[i];
  156.  
  157.             if(hist[i] == 0)
  158.                putc(c, printer);
  159.  
  160.             for(j=0; j<hist[i]; j++)
  161.                putc(c, printer);
  162.  
  163.             for(j=0; j<limit; j++)
  164.               putc(d, printer);
  165.  
  166.          }  /* ends else no grid marks */
  167.  
  168.       }  /* ends loop over k */
  169.  
  170.    }  /* ends loop over i */
  171.  
  172. }  /* ends print_hist_image */
  173.  
  174.